package com.example.demo.pattern.proxy.dynamics;

import com.example.demo.pattern.proxy.staticp.BuyHouse;
import com.example.demo.pattern.proxy.staticp.ProxyService;

import java.lang.reflect.Proxy;

/**
 * @program: demo
 * @description: 测试proxy
 * @author: yby
 * @create: 2020-06-23 16:22
 **/
public class TestProxy {

    public static void main(String[] args) {

        // jdk动态代理测试：
        ProxyService buyHouse = new BuyHouse();
        ProxyService buy = (ProxyService) Proxy
                .newProxyInstance(ProxyService.class.getClassLoader(),
                        new Class[]{ProxyService.class},
                        new JdkProxy(buyHouse));
        //buy.buyHouse();
        // 1.ClassLoader loader : 指定当前目标对象使用的类加载器，获取加载器的方法是固定的。
        // 2.Class<?>[] interfaces：指定目标对象实现的接口的类型,使用泛型方式确认类型
        // 3.InvocationHandler: 指定动态处理器，执行目标对象的方法时,会触发事件处理器的方法

        // cglib动态代理测试：
        ProxyService buyHouse2 = new BuyHouse();
        CglibProxy cp = new CglibProxy();
        ProxyService instance = (ProxyService) cp.getInstance(buyHouse2);
        instance.buyHouse();

    }
}
